/**
 * 闭包
 * 知识点
 *      *1、定义 => P33
 *      2、
 *          
 */
// 将类的静态变量通过闭包来实现，
var Book = (function() {
    // 类静态私有变量
    var bookNum = 0;
    // 类静态私有方法
    function checkBook(name) {}

    // 返回构造函数
    return function(newId, newName, newPrice) {
        // 私有变量
        var name, price;
        // 私有方法
        function checkId(id) {}

        // 特权方法：可以读取公有、私有变量的
        this.getName = function() {};
        this.getPrice = function() {};
        this.setName = function() {};
        this.setPrice = function() {};
        // 对象公有属性
        this.id = newId;
        // 公有方法
        this.copy = function() {}

        bookNum++;
        if (bookNum > 100) {
            throw new Error('我们仅出版100本书.');
        }
        // 构造器
        this.setName(newName);
        this.setPrice(newPrice);
    }
})();

Book.prototype = {
    isJsBook: true,
    display: function() {
    }
};

// 在闭包内部实现一个完整的类然后将其返回
var NewBook = (function() {
    // 静态私有变量
    var bookNum = 0;
    // 静态私有方法
    function checkBook(name) {};
    // 创建类
    function _book(newId, newName, newPrice) {
        // 私有变量
        var name, price;
        // 私有方法
        function checkId(id) {}
        // 特权方法
        this.getName = function() {};
        this.getPrice = function() {};
        this.setName = function() {};
        this.setPrice = function() {};
        // 公有属性
        this.id = newId;
        // 公有方法
        this.copy = function() {};

        bookNum++;
        if (bookNum > 100)
            throw new Error('我们仅出版100本书.');
        // 构造器
        this.setName(newName);
        this.setPrice(newPrice);
    }
    // 构建原型
    _book.prototype = {
        // 静态公有属性
        isJsBook: false,
        // 静态公有方法
        display: function() {}
    };
    // 返回类
    return _book;
})();
